package com.shrcl.engineerprocess.domain;

import com.shrcl.engineerprocess.domain.Engineer;
import com.shrcl.engineerprocess.domain.EngineerProjectAssignment;
import com.shrcl.engineerprocess.domain.EngineerProjectJob;
import com.shrcl.engineerprocess.domain.EngineerWorkOrderStatus;
import com.shrcl.engineerprocess.domain.impl.EngineerWorkOrderImpl;
import com.shrcl.engineerprocess.domain.proxy.EngineerWorkOrderProxy;
import edu.fudan.mylang.pf.EntityImplementation;
import edu.fudan.mylang.pf.IModelObject;
import java.util.Collection;
import java.util.Date;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;

@EntityImplementation(implementBy = EngineerWorkOrderImpl.class)
public interface EngineerWorkOrder extends IModelObject {
  public abstract EngineerProjectJob getProjectJob();
  
  public abstract EngineerWorkOrder setProjectJob(final EngineerProjectJob projectJob);
  
  public abstract Engineer getEngineer();
  
  public abstract EngineerWorkOrder setEngineer(final Engineer engineer);
  
  public abstract String getSid();
  
  public abstract EngineerWorkOrder setSid(final String sid);
  
  public abstract Date getStartDate();
  
  public abstract EngineerWorkOrder setStartDate(final Date startDate);
  
  public abstract Date getEndDate();
  
  public abstract EngineerWorkOrder setEndDate(final Date endDate);
  
  public abstract Collection<EngineerProjectAssignment> getProjectAssignments();
  
  public abstract EngineerProjectAssignment createAndAddtoProjectAssignments();
  
  public abstract EngineerProjectAssignment createAndAddtoProjectAssignments(final Procedure1<EngineerProjectAssignment> updater);
  
  public abstract EngineerWorkOrder removeFromProjectAssignments(final EngineerProjectAssignment engineerProjectAssignment);
  
  public abstract EngineerWorkOrder removeAllProjectAssignments();
  
  public abstract boolean isAllTaskFinishedorCancelled();
  
  public abstract void cancelAllTasks();
  
  public abstract String getRCProjectName();
  
  public abstract String getRCProjectCode();
  
  public abstract EngineerWorkOrderStatus getStatus();
  
  public abstract void start();
  
  public abstract void $startexecute(final EngineerProjectAssignment projectAssignment);
  
  public abstract void $taskFinish(final EngineerProjectAssignment projectAssignment);
  
  public abstract void $taskCancel(final EngineerProjectAssignment projectAssignment);
  
  public abstract void pendingApply();
  
  public abstract void addAssignment(final Procedure1<? super EngineerProjectAssignment> init);
  
  public abstract void delAssignment(final EngineerProjectAssignment assignment);
  
  public abstract void commitFinish();
  
  public abstract void finish();
  
  public abstract void pendingApprove();
  
  public abstract void pendingReject();
  
  public abstract Boolean isExecuting();
  
  public abstract Boolean isPending();
  
  public abstract Boolean isCommitted();
  
  public abstract Boolean isFinished();
  
  public abstract Boolean isPendingApply();
  
  public abstract Boolean isCreated();
  
  public abstract EngineerWorkOrderProxy toProxy();
}
